package com.example.java.zuo.新手班.class02;

/**
 * @Author : 佩萁
 * Description :
 * @Create : 2023/12/8 - 13:39
 */
public class RandToRand {
    public static void main(String[] args) {
        //首先来测试一下，Math.random()是不是在[0,,1)上等概率随机返回一个数
        //因为在数学上是不可能等概率的，因为在数学上这之间是无穷多个数的
        //但是在计算机中却是有穷个的
        System.out.println("测试开始");
        int testTimes = 100000000;//随机生成一万次数
        int count = 0;//记录在某个区间生成数的数量，以区间估计概率
        for (int i = 0; i < testTimes; i++) {
            if (Math.random() < 0.75) {//随机生成的数小于0.75，就count++
                count++;
            }
        }
        //通过统计随机生成的小于0.75的数的数量占总生成次数的比，得出概率
        System.out.println((double) count / (double) testTimes);//0.75001913,当然这是一次的计算值，可能会不同，但都在0.75左右

        System.out.println("================");
        //[0,1) -> [0,8) 0到8等概率
        count = 0;//重新置零
        for (int i = 0; i < testTimes; i++) {
            if (Math.random() * 8 < 5) {
                count++;
            }
        }
        System.out.println((double) count / (double) testTimes);//0.62489417
        System.out.println((double) 5 / (double) 8);//0.625

        int k = 9;
        int[] counts = new int[9];
        for (int i = 0; i < testTimes; i++) {
            int ans = (int) (Math.random() * k);
            counts[ans]++;
        }
        for (int i = 0; i < k; i++) {
            System.out.println(i + "这个数，出现看" + counts[i] + "次");
        }

        System.out.println("===================");
        count = 0;
        double x = 0.5;
        for (int i = 0; i < testTimes; i++) {
            if (xToXPower2() < x) {
                count++;
            }
        }
        System.out.println((double) count / (double) testTimes);//0.25007606
    }

    //Math.random()返回的是[0,1)之间等概率的小数
    //任意的x，x属于[0,1)，那么[0,x）范围上的数出现概率就是x，怎么调增为x平方呢？
    //x平方函数，x轴正半轴数越大y越大，也就是概率越高，所以我们要求最大值
    public static double xToXPower2() {
        //Math.random()是两个单独的个体，二者生成于[0,x)的概率都是x，总概率就是x*x=x^2
        //如果是x的三次方，就只需要三次个体就可以了
        return Math.max(Math.random(), Math.random());
    }
}
